package persistencia.busqueda;

import java.sql.CallableStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;

import com.sun.org.apache.bcel.internal.generic.Type;

import Excepciones.ExccepcionFormeteoDeFechas;

import negocio.administracion.Empleado;
import negocio.busqueda.EstudioPerfil;
import negocio.busqueda.ExperienciaTarea;
import negocio.busqueda.Perfil;
import negocio.cliente.Cliente;
import negocio.cliente.SolicitudRRHH;
import negocio.cv.ConocimientoIdioma;
import negocio.cv.Exigencia;
import negocio.cv.HerramientaInformatica;
import negocio.cv.Puesto;
import persistencia.DACBase;
import persistencia.SingletonDACBase;
import persistencia.cliente.DACConocimientoIdiomas;

public class DACPerfil extends DACBase{
	
	private Perfil perfil;
	private CallableStatement clstm;
	private ResultSet rs;
	
	public DACPerfil(DACBase dacBase) {
		super(dacBase);
	}
	
	public void actualizarPerfil(SolicitudRRHH solicitud){
		this.perfil = solicitud.getPerfil();
		try{
			
			System.out.println("La segunda vez deberia entrar a modificar DACPERFIL");
			clstm = getConn().prepareCall("{? = call save_perfil(?,?, ?, ?, ?, ?, ?, ?)}");			
			//			 	consulto el ultimo ID del perfil que cargue
			clstm.registerOutParameter(1,java.sql.Types.INTEGER);
			
			clstm.setInt("idperfil", perfil.getIdPerfil());			
			clstm.setInt("idsolicitudrrhh",solicitud.getIdSolicitudRRHH());			
			clstm.setInt("edaddesde", perfil.getEdadDesde());
			clstm.setInt("edadhasta", perfil.getEdadHasta());			
			clstm.setString("sexo", perfil.getSexo());	
			
			if(perfil.isDisponibFullPart()) {
				clstm.setString("disponibilidadfullpart","S");
			} 
			else {
				clstm.setString("disponibilidadfullpart","N");
			}
			clstm.setString("horariopart",perfil.getHorarioPart());	
			
			if(perfil.isMovilidad()) {
				clstm.setString("movilidad","S");
			} 
			else {
				clstm.setString("movilidad","N");				
			}
		
			clstm.execute();			
					
			if (perfil.getIdPerfil() == 0) {
				perfil.setIdPerfil(clstm.getInt(1));
			}
			
			
			
			
			
			
			
			//			insertamos  estudios exigencias tareas herramientas inf e idiomas
			
			DACExigenciaPerfil dacExigencia = new DACExigenciaPerfil(SingletonDACBase.tomarDACBase());
			
			dacExigencia.actualizarExigenciasDelPerfil(perfil);
			 
			
			DACEstudioPerfil dacEstudioPerfil = new DACEstudioPerfil(SingletonDACBase.tomarDACBase());
			dacEstudioPerfil.actualizarEstudiosPerfil(perfil); 
			
		
			DACExperienciaTarea dacExperienciaTarea = new DACExperienciaTarea(SingletonDACBase.tomarDACBase());
			dacExperienciaTarea.actualizarExperinciaEnTareas(perfil);
			 
			DACConocimientoIdiomas dacCI = new DACConocimientoIdiomas(SingletonDACBase.tomarDACBase());
			dacCI.actualizarConocimientoIdiomasPerfil(perfil);
			 
			DACHerrInfDelPerfil dacHIP = new DACHerrInfDelPerfil(SingletonDACBase.tomarDACBase());
			dacHIP.actualizarHerrInfDePerfil(perfil);				
			  
			
			System.out.println("La segunda vez deberia entrar a modificar Gest perfil luego de actualizar todo");
			
			clstm.close();
	        clstm = null;
	         
	         	            
	        
		}
		
		catch (SQLException ex) {
		    // handle any errors			
		    System.out.println("SQLException: " + ex.getMessage());
		    System.out.println("SQLState: " + ex.getSQLState());
		    System.out.println("VendorError: " + ex.getErrorCode());
		    System.out.println("Error en metodo altaPerfil_DacPerfil");
		}		
		
	}
	
	public Perfil consultarPerfil(int idSolicitudRRHH) {
		Perfil perfilConsulta = null;
		
		try{
			clstm = getConn().prepareCall("{call perfilConsultar(?)}");
			clstm.setInt("idsolicitud", idSolicitudRRHH);
			
			clstm.execute();
			rs = clstm.getResultSet();			
			if (rs.next()) {
				 perfilConsulta = new Perfil();
				 
				 perfilConsulta.setIdPerfil(rs.getInt("idperfil"));
				 perfilConsulta.setEdadDesde(rs.getInt("edaddesde"));
				 perfilConsulta.setEdadHasta(rs.getInt("edadhasta"));
				 perfilConsulta.setSexo(rs.getString("sexo"));
				 if(rs.getString("disponibilidadfullpart").equals("S")) {				 
					 perfilConsulta.setDisponibFullPart(true);
				 }
				 else {
					 perfilConsulta.setDisponibFullPart(false);
				 }
				 perfilConsulta.setHorarioPart(rs.getString("horariopart"));
				 
				 if(rs.getString("movilidad").equals("S")) {				 
					 perfilConsulta.setMovilidad(true);
				 }
				 else {
					 perfilConsulta.setMovilidad(false);
				 }
				 
				 DACEstudioPerfil dacEstudioPerfil = new DACEstudioPerfil(SingletonDACBase.tomarDACBase());
				 perfilConsulta.setEstudiosRequeridos(dacEstudioPerfil.consultarEstudiosPerfil(perfilConsulta.getIdPerfil()));
				 
				 DACExigenciaPerfil dacExigencia = new DACExigenciaPerfil(SingletonDACBase.tomarDACBase());
				 perfilConsulta.setExigencias(dacExigencia.consultarExigenciasDelPerfil(perfilConsulta.getIdPerfil()));
				 
				 DACExperienciaTarea dacExperienciaTarea = new DACExperienciaTarea(SingletonDACBase.tomarDACBase());
				 perfilConsulta.setExperienciasEnTareas(dacExperienciaTarea.consultarExperienciaDePerfil( 
						 perfilConsulta.getIdPerfil()));
				 
				 DACConocimientoIdiomas dacCI = new DACConocimientoIdiomas(SingletonDACBase.tomarDACBase());
				 perfilConsulta.setIdiomas(dacCI.consultarConocimientosIdiomasPerfil(
						 perfilConsulta.getIdPerfil()));
				 
				 DACHerrInfDelPerfil dacHIP = new DACHerrInfDelPerfil(SingletonDACBase.tomarDACBase());
				 perfilConsulta.setHerramientasInformaticas(dacHIP.consultarHerrInfDelPerfil( 
						 perfilConsulta.getIdPerfil()));		 
				 
			}			           
	
			rs.close();
			rs = null;
			clstm.close();
	        clstm = null;
	        
	    
	        
		}   
		catch (SQLException ex) {
		    // handle any errors
		    System.out.println("SQLException: " + ex.getMessage());
		    System.out.println("SQLState: " + ex.getSQLState());
		    System.out.println("VendorError: " + ex.getErrorCode());
		    System.out.println("Error en metodo consultarPerfil()_DacPerfil");
		}
		
	    return perfilConsulta;		
	}

	public void eliminarPerfil(Perfil perfil) {
		try{			
			clstm = getConn().prepareCall("{call delete_perfil(?)}");						
			clstm.setInt("par_idperfil", perfil.getIdPerfil());					
			clstm.execute();	
			
			
			
			DACEstudioPerfil dacEstudioPerfil = new DACEstudioPerfil(SingletonDACBase.tomarDACBase());
			for (EstudioPerfil ep : perfil.getEstudiosRequeridos()){
				dacEstudioPerfil.eliminarEstudioDelPerfil(ep); 	
			}
								
			DACExperienciaTarea dacExperienciaTarea = new DACExperienciaTarea(SingletonDACBase.tomarDACBase());
			for (ExperienciaTarea et : perfil.getExperienciasEnTareas()){
				dacExperienciaTarea.eliminarExperienciaEnTarea(et, perfil.getIdPerfil());
			}
			 
			DACConocimientoIdiomas dacCI = new DACConocimientoIdiomas(SingletonDACBase.tomarDACBase());
			for (ConocimientoIdioma ci : perfil.getIdiomas()) {
				dacCI.eliminarConocimientoIdiomPerfil(ci);
			}
			 
			DACHerrInfDelPerfil dacHIP = new DACHerrInfDelPerfil(SingletonDACBase.tomarDACBase());
			for (HerramientaInformatica hi : perfil.getHerramientasInformaticas()){
				dacHIP.eliminarHerramientaInformatica(hi, perfil.getIdPerfil());
			}
			DACExigenciaPerfil dacExigencia = new DACExigenciaPerfil(SingletonDACBase.tomarDACBase());			
			for (Exigencia exigencia : perfil.getExigencias()) {
				dacExigencia.eliminarExigenciaDelPerfil(exigencia, perfil.getIdPerfil());
			} 
	       
		}
		
		catch (SQLException ex) {
		    // handle any errors			
		    System.out.println("SQLException: " + ex.getMessage());
		    System.out.println("SQLState: " + ex.getSQLState());
		    System.out.println("VendorError: " + ex.getErrorCode());
		    System.out.println("Error en metodo eliminarPerfil_DacPerfil");
		}	
		
	}

}
